package event

import (
	"platon-tools/go-service/protocol/rpc_pb"
	"time"
)

// 监控相关数据同步
type MonitorNode struct {
	NodeList []NodeMonitorItem `json:"node_list"`
}

// 节点相关合约数据同步
type NodeMonitorItem struct {
	NodeId          string  `json:"node_id"`
	NodeName        string  `json:"node_name"`
	CurrentBlock    uint64  `json:"current_block"`     // 当前区块高度
	DiskRatio       float64 `json:"disk_ratio"`        // 硬盘
	CPURatio        float64 `json:"cpu_ratio"`         // cpu
	MemoryRatio     float64 `json:"memory_ratio"`      // memory
	NetWorkRatio    float64 `json:"net_work_ratio"`    // 网络
	IORatio         float64 `json:"io_ratio"`          // io
	RAmount         float64 `json:"r_amount"`          // 读
	WAmount         float64 `json:"w_amount"`          // 写
	RWAmount        float64 `json:"rw_amount"`         // 读写
	RPCResponseTime float64 `json:"rpc_response_time"` // rpc延迟
	NodeStatus      string  `json:"node_status"`       // 节点状态
	CurrentHigh     uint64  `json:"current_high"`      // 当前高度
}

// pod节点信息
type PodsList struct {
	Pods []PodItem `json:"pods"`
}
type PodItem struct {
	Name       string    `json:"name"`
	IP         string    `json:"ip"`
	Status     string    `json:"status"`
	StartTime  time.Time `json:"start_time"`
	CreateTime time.Time `json:"create_time"`
	App        string    `json:"label"`
	NodeId     string    `json:"node_id"`
}

type MonitorEvent struct {
	Name rpc_pb.MsgType
	Data []byte
}

type NewPod struct {
	Err     error   `json:"err"`
	PodName string  `json:"pod_name"`
	Item    PodItem `json:"item"`
}

// 共识周期
type ValidatorList struct {
	CurrentBlock     uint64      `json:"current_block"`      // 当前区块高度
	ConsensusNo      uint64      `json:"consensusNo"`        // 共识周期轮次
	Epoch            uint64      `json:"epoch"`              // 结算周期轮次
	MiningReward     float64     `json:"mining_reward"`      // 出块收益-当前周期 43个 个*10
	CurrentBlockNode string      `json:"current_block_node"` // 当前出块节点
	NodesList        []Validator `json:"nodes_list"`
}

type Validator struct {
	NodeId             string  `json:"node_id"`              // 节点ID
	NodeName           string  `json:"node_name"`            // 节点名称-链上的名称
	StakingAddr        string  `json:"staking_addr"`         // 质押地址
	StakingAddrAccount float64 `json:"staking_addr_account"` // 质押地址余额
	BenefitAddr        string  `json:"benefit_addr"`         // 收益地址
	BenefitAddrAccount float64 `json:"benefit_addr_account"` // 收益地址余额
	BonusRatio         uint16  `json:"bonus_ratio"`          // 分红比例
	TotalBalance       float64 `json:"total_balance"`        // 总资产
	StakingSum         float64 `json:"staking_sum"`          // 节点质押量-当前周期
	DelegationSum      float64 `json:"delegation_sum"`       // 节点委托量-当前周期
	NodeStatus         int     `json:"node_status"`          // 节点状态
	Extra              string  `json:"extra"`
}

// 委托收益 = (出块收益 + 质押收益) * 分红比例
// 结算周期
type VerifierList struct {
	CurrentBlock     uint64     `json:"current_block"`      // 当前区块高度
	ConsensusNo      uint64     `json:"consensusNo"`        // 共识周期轮次
	Epoch            uint64     `json:"epoch"`              // 结算周期轮次
	StakingReward    float64    `json:"staking_reward"`     // 质押收益-当前周期
	CurrentBlockNode string     `json:"current_block_node"` // 当前出块节点
	NodesList        []Verifier `json:"nodes_list"`
}

type Verifier struct {
	NodeId               string  `json:"node_id"`                // 节点ID
	NodeName             string  `json:"node_name"`              // 节点名称-链上的名称
	StakingAddr          string  `json:"staking_addr"`           // 质押地址
	StakingAddrAccount   float64 `json:"staking_addr_account"`   // 质押地址余额
	BenefitAddr          string  `json:"benefit_addr"`           // 收益地址
	BenefitAddrAccount   float64 `json:"benefit_addr_account"`   // 收益地址余额
	BonusRatio           uint16  `json:"bonus_ratio"`            // 分红比例
	TotalBalance         float64 `json:"total_balance"`          // 总资产
	DelegationSum        float64 `json:"delegation_sum"`         // 节点委托量-当前周期
	StakingSum           float64 `json:"staking_sum"`            // 节点质押量-当前周期
	DelegationNotReceive float64 `json:"delegation_not_receive"` // 待领取委托奖励
	NodeStatus           int     `json:"node_status"`            // 节点状态
	ValidatorTerm        uint32  `json:"validator_term"`         // 共识轮任期
	Extra                string  `json:"extra"`
}

type Msg struct {
	Type    rpc_pb.MsgType
	Payload interface{}
}
